﻿//using System;
//using Xamarin.Forms;

//namespace SharpDepend.XamarinForms.Controls
//{
//    internal struct CommandStore
//    {
//        public string Text;
//        public object Tag;
//        public CommandStore(string text, object tag)
//        {
//            this.Text = text;
//            this.Tag = tag;
//        }
//    }

//    abstract class FileDialog : ContentView
//    {
//        private string defaultPath;
//        private string extensions;

//        internal string mPath;

//        protected ZEntry CurrentFile = new ZEntry();
//        protected SimpleListBox mFiles = new SimpleListBox("Files");
//        protected StackLayout Buttons = new StackLayout();
//        protected Picker Extensions = new Picker();

//        public string Title { get; private set; }

//        public FileDialog(string title, string extensions, string defaultPath, IFileManagerManager fileSystem)
//        {

//            string filename = StringUtils.GetFilenameOrFolderNameFromFullPath(defaultPath);
//            string path = null;
//            if (filename.Contains(".") && filename.Length > 1)
//            {
//                path = StringUtils.GetPathFromFullPath(defaultPath) + "/";
//                CurrentFile.Text = filename;
//            }
//            else
//            {
//                path = defaultPath;
//            }

//            Title = title;
//            this.extensions = extensions;
//            this.defaultPath = path;

//            mPath = path;

//            StackLayout grid = new StackLayout();
//            Content = grid;

//            Label currentFileLabel = new Label();
//            currentFileLabel.Text = "Filename";
//            grid.Children.Add(currentFileLabel);

//            Grid.SetRow(CurrentFile, 0);
//            CurrentFile.SetXHeight(60);
//            grid.Children.Add(CurrentFile);

//            mFiles.VerticalOptions = LayoutOptions.FillAndExpand;
//            Grid.SetRow(mFiles, 1);
//            grid.Children.Add(mFiles);

//            Buttons.Orientation = StackOrientation.Horizontal;
//            Buttons.SetXHeight(60);
//            Grid.SetRow(Buttons, 2);
//            grid.Children.Add(Buttons);

//            Extensions.HorizontalOptions = LayoutOptions.FillAndExpand;
//            Buttons.Children.Add(Extensions);

//            string[] extensionList = extensions.Split('|');
//            for (int i = 0; i < extensionList.Length / 2; i += 2)
//            {
//                if (i % 2 == 0)
//                {
//                    string display = extensionList[i] + " (" + extensionList[i + 1] + ")";
//                    Extensions.Items.Add(display);
//                }
//            }
//            Extensions.SelectedIndex = 0;

//            // List files.
//            if (fileSystem != null)
//            {
//                string[] files = fileSystem.ListFiles(path);
//                foreach (var file in files)
//                {
//                    AddFile(file, file);
//                }
//            }
//        }

//        public void AddFile(string file, object tag)
//        {
//            CommandStore store = new CommandStore(file, tag);

//            string filename = ZquenceStudio3Host.Utils.StringUtils.GetFilenameOrFolderNameFromFullPath(file);

//            ImageSource imageSource = XamarinFormsHelper.ResourceImage(FileIcons.GetIconFromFilename(filename));

//            ListBoxItem rowItem = new ListBoxItem(imageSource, filename, file);

//            mFiles.Add(rowItem, store, delegate (object item)
//            {
//                CommandStore s = (CommandStore)item;

//                string name = ZquenceStudio3Host.Utils.StringUtils.GetFilenameOrFolderNameFromFullPath(filename);

//                CurrentFile.Text = OnFileTextBoxSet(name);
//            });
//        }

//        public void Clear()
//        {
//            mFiles.Clear();
//        }

//        protected virtual string OnFileTextBoxSet(string filename)
//        {
//            return filename;
//        }

//        protected void RaiseOnActionDone(string path)
//        {
//            var call = OnFileActionDone;
//            if (call != null)
//            {
//                call(path);
//            }
//        }

//        public event Action<string> OnFileActionDone;
//    }

//    class OpenFileDialog : FileDialog
//    {
//        internal ZButton mOpen = new ZButton();

//        public OpenFileDialog(string title, string extensions, string defaultPath, IFileManagerManager fileSystem)
//            : base(title, extensions, defaultPath, fileSystem)
//        {
//            mOpen.Text = "Open file";
//            mOpen.Clicked += MOpen_Clicked;
//            mOpen.ZBackgroundColor = GlobalColors.GreenButtonColor;
//            mOpen.SetXWidth(200);

//            Buttons.Children.Add(mOpen);
//        }

//        private void MOpen_Clicked(object sender, EventArgs e)
//        {
//            string fullPath = mPath + CurrentFile.Text;

//            //CommandStore store = (CommandStore)mFiles.SelectedItem;

//            RaiseOnActionDone(fullPath);
//        }
//    }

//    class SaveFileDialog : FileDialog
//    {
//        internal ZButton mSave = new ZButton();

//        public SaveFileDialog(string title, string extensions, string defaultPath, IFileManagerManager fileSystem)
//            : base(title, extensions, defaultPath, fileSystem)
//        {
//            mSave.Text = "Save file";
//            mSave.Clicked += MSave_Clicked;
//            mSave.ZBackgroundColor = GlobalColors.GreenButtonColor;
//            mSave.SetXWidth(200);

//            Buttons.Children.Add(mSave);
//        }

//        private void MSave_Clicked(object sender, EventArgs e)
//        {
//            string path = mPath + CurrentFile.Text;

//            string ext = Extensions.Items[Extensions.SelectedIndex];

//            int dot = ext.LastIndexOf('.');
//            int last = ext.LastIndexOf(')');

//            ext = ext.Substring(dot, last - dot);

//            if (!path.EndsWith(ext))
//            {
//                path += ext;
//            }

//            RaiseOnActionDone(path);
//        }

//        protected override string OnFileTextBoxSet(string filename)
//        {
//            return ZquenceStudio3Host.Utils.StringUtils.GetFilenameFromFullPath(filename);
//        }
//    }

//    class OpenFolderDialog : ContentPage
//    {
//        private string defaultPath;

//        internal string mPath;

//        protected ListBox mFiles = new ListBox("Folders");
//        protected ZButton Open = new ZButton();

//        public OpenFolderDialog(string title, string defaultPath, IFileManagerManager fileSystem)
//        {
//            Title = title;
//            this.defaultPath = defaultPath;

//            mPath = defaultPath;

//            Grid grid = new Grid();
//            grid.BackgroundColor = Color.Black;
//            grid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(80, GridUnitType.Star) });
//            grid.RowDefinitions.Add(new RowDefinition { Height = XExt.XSize(80) });
//            Content = grid;

//            Grid.SetRow(mFiles, 0);
//            grid.Children.Add(mFiles);

//            Grid.SetRow(Open, 1);
//            Open.ZBackgroundColor = GlobalColors.GreenButtonColor;
//            Open.Text = "Open";
//            Open.IsEnabled = false;
//            Open.Clicked += Open_Clicked;
//            Open.SetXWidth(200);
//            grid.Children.Add(Open);

//            // List files.
//            if (fileSystem != null)
//            {
//                string[] folders = fileSystem.ListFolders(defaultPath);
//                foreach (var file in folders)
//                {
//                    AddFolder(file, file);
//                }
//            }
//        }

//        public void AddFolder(string file, object tag)
//        {
//            CommandStore store = new CommandStore(file, tag);

//            string filename = ZquenceStudio3Host.Utils.StringUtils.GetFilenameOrFolderNameFromFullPath(file);

//            ImageSource imageSource = XamarinFormsHelper.ResourceImage("Images/Icons/albumexp_folder.png"); ;

//            ListBoxItem rowItem = new ListBoxItem(imageSource, filename, file);

//            mFiles.Add(rowItem, store, delegate (object item)
//            {
//                CommandStore s = (CommandStore)item;

//                mPath = file;

//                Open.Text = "Open " + ZquenceStudio3Host.Utils.StringUtils.GetFilenameOrFolderNameFromFullPath(file);
//                Open.IsEnabled = true;
//            });
//        }

//        private void Open_Clicked(object sender, EventArgs e)
//        {
//            RaiseOnActionDone(mPath);
//        }

//        protected void RaiseOnActionDone(string path)
//        {
//            var call = OnFileActionDone;
//            if (call != null)
//            {
//                call(path);
//            }
//        }

//        public event Action<string> OnFileActionDone;
//    }

//}
